package practice_2025_10.practice_10_16;

class Solution {
    /**
     * 最长重复子数组
     * 动规
     * @param nums1
     * @param nums2
     * @return
     */
    public int findLength(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;
        // 创建 dp 表
        int[][] dp = new int[m + 1][n + 1];
        // 初始化
        int ret = 0;
        // 填表
        for(int i = 1; i <= m; i++) {
            for(int j = 1; j <= n; j++) {
                if(nums1[i - 1] == nums2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                    ret = Math.max(ret, dp[i][j]);
                }
                //else {
                //     dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                // }
                // System.out.println("i: " + i + " nums1[i]: " + nums1[i - 1] + " j: " + j + " nums2[j]: " + nums2[j - 1]);
                // System.out.println("dp[i][j]: " + dp[i][j]);
            }
        }
        return ret;
    }
}